// 错位排列
// 信封游戏
// n 封不同的信，编号 1 ~ n，现在要将这 n 封信放在编号为
// 1 ~ n 的信封中，要求信的编号和信封的编号不一样，问有多
// 少中不同的放法
// 测试链接 ：https://www.luogu.com.cn/problem/P1595
// 相关帖子 ：https://www.cnblogs.com/dx123/p/17023760.html
// 相关帖子 ：https://oi-wiki.org/math/combinatorics/derangement/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 21;
long long D[MAXN];

int main()
{
    int n;
    scanf("%d", &n);
    D[1] = 0, D[2] = 1;
    for(int i = 3; i < MAXN; ++i)
    {
        D[i] = (i - 1) * (D[i - 1] + D[i - 2]);
        // D[i] = i * D[i - 1] + ((i & 1) ? -1 : 1);
    }
    printf("%lld\n", D[n]);

    return 0;
}